package com.baitengsoft.patentapimonitor.common.utils;


import cn.hutool.core.date.DateUtil;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 日期工具类
 * @author Chen 2017/12/25
 */
public class DateUtils {

    private static final SimpleDateFormat yyyyMMddHHmmss = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private static final SimpleDateFormat yyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");
    /**
     * 获取当前年份
     * @return
     */
    public static Integer getCurrentYear() {
        return Integer.parseInt(new SimpleDateFormat("yyyy").format(new Date()));
    }

    /**
     * 获取去年年份
     * @return
     */
    public static Integer getLastYear(){
        return getCurrentYear() -1;
    }

    /**
     * 获取当前月份
     * @return
     */
    public static Integer getCurrentMonth(){
        return Integer.parseInt(new SimpleDateFormat("MM").format(new Date()));
    }

    /**
     * 获取当前年+月份
     * @return
     */
    public static Integer getCurrentDate(){
        return getCurrentYear()*100+getCurrentMonth();
    }

    /**
     * 获取去年年份+12月
     * @return
     */
    public static Integer getLastYearDate(){
        return getLastYear()*100+12;
    }

    /**
     * Date 转 String
     */
    public static String format(Date date){
        if(date ==null) return "";
        return yyyyMMddHHmmss.format(date);
    }

    public static String dateformat(Date date){
        if(date ==null) return "";
        return yyyyMMdd.format(date);
    }
    public static Date parse(String date) {
        Date parse = null;
        try {
//            parse = yyyyMMddHHmmss.parse(date);
            parse = yyyyMMdd.parse(date);
        } catch (ParseException e) {
            return null;
        }
        return parse;
    }
    /**
     * 获取今年第一天
     */
    public static Date getFirstDateOfThisYear(){
        return  getYearFirst(getCurrentYear());
    }
    /**
     * 获取今年最后一天
     */
    public static Date getEndDateOfThisYear(){
        return  getYearLast(getCurrentYear());
    }

    /**
     * 获取某年第一天日期
     * @param year 年份
     * @return Date
     */
    public static Date getYearFirst(int year){
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        Date currYearFirst = calendar.getTime();
        return currYearFirst;
    }

    /**
     * 获取某年最后一天日期
     * @param year 年份
     * @return Date
     */
    public static Date getYearLast(int year){
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        calendar.roll(Calendar.DAY_OF_YEAR, -1);
        Date currYearLast = calendar.getTime();
        return currYearLast;
    }


    public static String getfmCompareDate(){
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.setTime(new Date());
        calendar.add(Calendar.YEAR, -20);//当前时间减去一年，即一年前的时间\
        return yyyyMMdd.format(calendar.getTime());
    }

    public static String getqtCompareDate(){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.add(Calendar.YEAR, -10);//当前时间减去一年，即一年前的时间
        return yyyyMMdd.format(calendar.getTime());
    }

    public static Date getDateByMonth(int month){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.add(Calendar.MONTH, month);//当前时间减去一年，即一年前的时间
        return calendar.getTime();
    }

    /**
     * 计算出来的维持时间不足一年的显示不足一年，维持时间在1-2年的显示1年，维持时间在2-3年的，显示2年，以此类推
     */
    public static String getMaintenanceYear(Date expiryDate,Date patAppDate){
        if (expiryDate == null || patAppDate == null){
            return "无数据";
        }
        long year = DateUtil.betweenYear(expiryDate, patAppDate, false);
        if (year == 0) return "不足1年";
        else return String.valueOf(year);
    }

    /**
     * 获取近七年
     */
    public static List<Integer> getNearSevenYears() {
        List<Integer> years = new ArrayList<>();
        for (int i = 0;i<7;i++){
            years.add(getCurrentYear() - i);
        }
        return years;
    }
}
